/**
 * Author: 笨蛋超人不会飞
 * Date:  10:39
 */
public class question_48 {
}
//这是一道旋转矩阵的题目，要求是不能使用额外的矩阵，也就是只能使用一个矩阵
class Solution_48 {
    public void rotate(int[][] matrix) {
        //先进行非空的判断
        if(matrix==null||matrix.length==0){
            return;
        }
        //如果长度为1的话，直接返回
        if(matrix.length==1){
            return;
        }
        int n=matrix.length;
        //sum表示需要旋转的单圈数,这里如果n是奇数的话那么就会少一圈，因为最里面是1个，是不需要变得

        int sum=n/2;
        int start_index=-1;
        int end_index=n;
        int temp=0;//临时存储容器
        for (int i = 0; i < sum; i++) {
            //每次进来之后先定义出矩阵的头和尾对应的坐标
            start_index+=1;
            end_index-=1;
            for (int k = 0; k <end_index-start_index; k++) {
                //先把第一个存储下来
                temp=matrix[start_index][start_index];
                //先遍历第一列
                for (int j = start_index+1; j <=end_index ; j++) {
                    matrix[j-1][start_index]=matrix[j][start_index];
                }
                //再遍历最后一行的数据
                for (int j = start_index+1; j <=end_index ; j++) {
                    matrix[end_index][j-1]=matrix[end_index][j];
                }
                //再遍历最后一列的数据
                for (int j = end_index-1; j >=start_index; j--) {
                    matrix[j+1][end_index]=matrix[j][end_index];

                }
                //再遍历第一行
                for (int j = end_index-1; j >=start_index; j--) {
                    matrix[start_index][j+1]=matrix[start_index][j];
                }
                //还有最后一个数别忘记了
                matrix[start_index][start_index+1]=temp;
            }


        }




    }
}
